This page has been superceded by a wiki version of this example: DateLocalizationUsingVersionExample
/*
locales2.d
Author: Justin C Calvarese
Date: October 7, 2003
License: Public Domain
Demonstrates using version() to handle different locales.
Compile for the United States locale:
dmd locales.d -version=UNITED_STATES
Compile for the Canadian (English) locale:
dmd locales.d -version=CANADIAN_ENGLISH
These date formats are based on
"docs.sun.com: International Language Environments Guide"
http://docs.sun.com/db/doc/806-6642/6jfipqu57?a=view
*/
import std.string;
char[] dateString(byte day, byte month, int yr)
{
int twoDigitYr = yr % 100;
version(CANADIAN_ENGLISH) return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ leadingZeros(twoDigitYr, 2);
version(DANISH) return toString(yr) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(day, 2);
version(FINNISH) return leadingZeros(day, 2) ~ "." ~ leadingZeros(month, 2) ~ "." ~ toString(yr);
version(FRENCH) return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ toString(yr);
version(GERMAN) return toString(yr) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(day, 2);
version(ITALIAN) return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ leadingZeros(twoDigitYr, 2);
version(NORWEGIAN) return leadingZeros(day, 2) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(twoDigitYr, 2);
version(SPANISH) return leadingZeros(day, 2) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(twoDigitYr, 2);
version(SWEDISH) return toString(yr) ~ "-" ~ leadingZeros(month, 2) ~ "-" ~ leadingZeros(day, 2);
version(GREAT_BRITAIN) return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ leadingZeros(twoDigitYr, 2);
version(UNITED_STATES) return leadingZeros(month, 2) ~ "-" ~ leadingZeros(day, 2) ~ "-" ~ leadingZeros(twoDigitYr, 2);
version(THAI) return leadingZeros(day, 2) ~ "/" ~ leadingZeros(month, 2) ~ "/" ~ toString(yr);
}
char[] leadingZeros(byte num, byte digits)
/* also in currency.d and with.d */
{
char[] buffer;
byte diff;
buffer = toString(num);
if (buffer.length < digits)
{
diff = digits - buffer.length;
for(int i=0; i < diff; i++)
buffer = "0" ~ buffer;
}
return buffer;
}
int main()
{
printf("%.*s\n", dateString(24, 8, 2001));
return 0;
}